import axios from 'axios';
import qs from 'qs';
import router from '../router';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';

NProgress.configure({ showSpinner: false }); // 进度条不显示spin

const Axios = axios.create({
  baseURL: '/api', // 因为我本地做了反向代理
  timeout: 10000,
  responseType: 'json',
  withCredentials: true, // 是否允许带cookie这些
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
  }
});

//POST传参序列化(添加请求拦截器)
Axios.interceptors.request.use(
  config => {
    NProgress.start();
    // 在发送请求之前做某件事
    if (config.method === 'post') {
      // 序列化
      config.data = qs.stringify(config.data);
      // 温馨提示,若是贵公司的提交能直接接受json 格式,可以不用 qs 来序列化的
    }

    // 若是有做鉴权token , 就给头部带上token
    // 若是需要跨站点,存放到 cookie 会好一点,限制也没那么多,有些浏览环境限制了 localstorage 的使用
    // let token = localStorage.getItem('xtoken') || '';

    // if (token) {
    //   config.headers.XToten = token;
    // }
    return config;
  },
  error => {
    // error 的回调信息,看贵公司的定义
    return Promise.reject(error.data.error.message);
  }
);

//返回状态判断(添加响应拦截器)
Axios.interceptors.response.use(
  res => {
    NProgress.done();
    //对响应数据做些事
    // if (res.data && res.data.msg == 1001) {
    //   return Promise.reject(res.data.error.message);
    // }
    // if (res.data && res.data.code) {
    //   return res.data
    // }
    return res.data;
  },
  error => {
    NProgress.done();
    let { status, statusText, data } = error.response;
    return {
      code: status,
      data,
      msg: statusText
    };
  }
);

// 对axios的实例重新封装成一个plugin ,方便 Vue.use(xxxx)
export default {
  install: function(Vue, Option) {
    Object.defineProperty(Vue.prototype, '$http', { value: Axios });
  }
};
